Network storage is a common technique for making large amounts of data accessible to multiple users, archiving data, and other purposes. In a network storage environment, a storage server on a network makes data available to client (host) systems by presenting or exporting to the clients one or more logical containers of data. There are various forms of network storage, including, for example, network attached storage (NAS) and storage area network (SAN). In a NAS system, a storage server services file-level requests from clients, whereas in a SAN a storage server services block-level requests. Some storage servers are capable of servicing both file-level requests and block-level requests.
In a large-scale network storage system, such as used in many large business enterprises, it is often crucial to maintain a consistently high level of performance (throughput, efficiency, etc.). Toward that end, some network storage systems use one or more service level objectives (SLOs) to help evaluate and maintain an adequate level performance. An SLO is a set of one or more values relating to one or more specific measurable performance characteristics (“SLO characteristics”), and specifying one or more desired or required levels of service to be provided to an application or a set of applications. Common SLO characteristics are, for example, latency, cost, protection against local failures or corruption, geographic dispersion, efficiency, throughput, etc. An SLO, therefore, can be defined in terms of any one or more of these characteristics, and other characteristics. By monitoring a system's actual performance relative to an SLO, it can be determined whether the system is performing adequately, and adjustments to the state of the system can be made if it is not.
A given SLO characteristic can be used to control one or more “degrees of freedom” in a storage system. A degree of freedom is, in this context, a high-level type or category of operation, task or configuration state that can be performed in or by a storage system, such as data replication or data placement. Compliance with a given SLO characteristic can be measured, and system state (e.g., data layout) can be adjusted for any of various different degrees of freedom. For example, additional copies of data can be created (replication) and/or data can be moved from one storage tier to another (data placement) to achieve compliance with a specified SLO. The particular degrees of freedom that are available in a given storage system are implementation-specific.
At least one conventional network storage system includes a software-implemented SLO engine that measures the system's compliance with SLOs and makes or controls adjustments to system state as needed, in one or more degrees of freedom, to achieve better SLO compliance. For example, the SLO engine might create additional copies of data and/or move data around to achieve compliance with a specified SLO. However, the SLO engine is “hard-coded” with knowledge of the degrees of freedom that the storage system has, and therefore it has the ability to modify system state in only those particular degrees of freedom. Consequently, the SLO engine is very inflexible. Hence, if a new degree of freedom (e.g., data compression capability) were to be added to the storage system, the SLO engine could not determine how adjustments in that degree of freedom might affect compliance with the SLO or affect operations in other degrees of freedom. In order to do so, the SLO engine would have to be either replaced with a more capable SLO engine that has such knowledge/capability, or it would have to be taken off-line and updated in place to add such capability. Either of these scenarios would involve at least some inconvenience to users of the system, and potentially a disruption of system operation. In a large-scale storage system that stores mission-critical data, even minimal down time can be extremely disruptive to users and the overall business that the system supports.